
package com.xtsoft.platform.base.system.repository;
/*
*    上海信拓信息技术有限公司 Koala企业综合信息管理系统
*    Copyright (C) 2010-2015 ShangHai XinTuo Software Inc.
*/


import com.xtsoft.core.repository.GenericRepository;
import com.xtsoft.platform.base.system.domain.SysOrganize;
import com.xtsoft.platform.base.system.domain.SysUser;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.List;
import java.util.Optional;


@Repository
public interface SysUserRepository extends GenericRepository<SysUser,String> {
	/**
	 * 
	 * <p> 统计某用户具有某角色别名的记录数  </p>  
	 * @param userId
	 * @param roleAlias
	 * @return
	 * @return int
	 * @throws  
	 * @author defencez  
	 * @date 2021年6月16日 
	 * @time 下午6:32:10
	 */
	@Query(value = "SELECT count(*) FROM user_role WHERE userId=?1 AND roleId=(SELECT roleId FROM sys_role WHERE alias=?2)",nativeQuery = true)
	public int checkAdmin(String userId,String roleAlias);
	 /**
	  * 
	  * <p> 根据登录Id、口令、状态查找用户  </p>  
	  * @param loginId
	  * @param password
	  * @param state
	  * @return
	  * @return Optional<SysUser>
	  * @throws  
	  * @author defencez  
	  * @date 2020年5月9日 
	  * @time 上午10:37:54
	  */
	 public Optional<SysUser> findByLoginIdAndPasswordAndState(String loginId, String password, Integer state);
	 /**
	  * 
	  * <p> 根据登录Id查找用户  </p>  
	  * @param loginId
	  * @return
	  * @return Optional<SysUser>
	  * @throws  
	  * @author defencez  
	  * @date 2020年5月9日 
	  * @time 上午10:38:31
	  */
	 public Optional<SysUser> findByLoginId(String loginId);
	 /**
	  * 
	  * <p> 根据登录名、状态查找用户  </p>  
	  * @param loginId
	  * @return
	  * @return Optional<SysUser>
	  * @throws  
	  * @author defencez  
	  * @date 2020年5月9日 
	  * @time 上午10:39:59
	  */
	 public Optional<SysUser> findByLoginIdAndState(String loginId,Integer state);
	 /**
	  * 
	  * <p> 根据用户名查找用户  </p>  
	  * @param userName
	  * @return
	  * @return List<SysUser>
	  * @throws  
	  * @author defencez  
	  * @date 2020年5月9日 
	  * @time 上午10:39:05
	  */
	 public List<SysUser> findByUsername(String userName);
	 /**
	  * 
	  * <p> 根据登录名查找密码  </p>  
	  * @param loginId
	  * @return
	  * @return String
	  * @throws  
	  * @author defencez  
	  * @date 2020年5月9日 
	  * @time 上午11:01:19
	  */
	 @Query("select a.sysOrganize.organizeId from SysUser a where a.loginId = ?1")
  	 public int findPasswordByLoginId(String loginId);
	/**
	 *  
	 * <p> 根据企业查找用户  </p>  
	 * @param sysOrganize
	 * @return
	 * @return List<SysUser>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 上午11:01:49
	 */
	public List<SysUser> findBySysOrganize(SysOrganize sysOrganize);
	/**
	 * 
	 * <p> 根据用户Id集合更新状态  </p>  
	 * @param userIds
	 * @return
	 * @return long
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 下午1:42:54
	 */
	@Modifying  
	@Query("update SysUser u set u.state = abs(u.state - 1) where u.userId in ?1")
	/**
	 * 
	 * <p>设置状态的  </p>  
	 * @param userIds
	 * @return
	 * @return int
	 * @throws  
	 * @author shijunwei  
	 * @date 2020年6月2日 
	 * @time 下午4:14:14
	 */
	public int setStateByUserIds(Collection<String> userIds);
	/**
	 * 
	 * <p> 根据用户Id集合批量更新密码    </p>  
	 * @param password 更新后的密码
	 * @param userIds 要更新的记录ID集合
	 * @return
	 * @return long 更新影响的记录数
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月9日 
	 * @time 下午1:50:03
	 */
	@Modifying
	@Query("update SysUser u set u.password = ?1 where u.userId in ?2")
	public int setPasswordByUserIds(String password,Collection<String> userIds);



	public SysUser findSysUsersByUsername(String username);
	
}